require(["config"],function(){
    require(["jquery","template","cookie","load"],function($,template){
        function cartPageData(){
            $.cookie.json = true;
            this.cart = [];
            // 页面初始化
            this.init();
        };
        $.extend(cartPageData.prototype,{
            // 初始化页面处理函数
            init(){
                // 读取cookie数据
                this.readCookieData();
                // 事件函数处理
                this.addListener();
            },
            readCookieData(){
                // 读取数据渲染页面
                
                const cart = this.cart = $.cookie("cart") || [];
                if(cart.length == 0){
                    const _html = $("<div></div>").text("你的购物车空空如也！！！").css({width:1170,lineHeight:"200px",textAlign:"center",height:200,background:"#f5f5f5"})
                    $(".cart-main-list").html(_html);
                    return;
                }
                const _html = template("shoppingProduct",{productList:cart});
                $(".cart-main-list").html(_html);
                
            },
            // 判断购物车是否有数据
            isCartDara(){
                if(this.cart.length == 0){
                    const _html = $("<div></div>").text("你的购物车空空如也！！！").css({width:1170,lineHeight:"200px",textAlign:"center",height:200,background:"#f5f5f5"})
                    $(".cart-main-list").html(_html);
                    return;
                }
            },
            // 事件函数处理
            addListener(){
                // 加减数量操作
                $(".item").on("click",".plus,.reduce",$.proxy(this.productPlus,this));
                //删除数据操作
                $(".item").on("click",".item-del",$.proxy(this.delHandler,this));
                // 全选事件处理操作
                $(".checkAll").on("click",$.proxy(this.checkAll,this));
                // 部分选中
                $(".item").on("click",".itemCheck",$.proxy(this.partial,this));
                // 总金额计算
                $(".item").on("click",".plus,.reduce,.item-del,.itemCheck",$.proxy(this.totalSum,this))
                //批量删除处理
                $(".sett-left").on("click",".sett-del",$.proxy(this.deteleProduct,this));
                // 点击结算跳转页面
            },
            productPlus(event){
                // 找到事件源所在的父元素
                const $src = $(event.target);
                const $parse = $src.parents('.item');
                // 通过父元素的下标，找到cart数组中的商品数量，并做自增操作
                if($src.is(".plus")){  //加操作
                    this.cart[$parse.index()].num++;
                    $parse.find(".number").text(this.cart[$parse.index()].num);
                    // 修改小计金额
                    $parse.find(".subto").text((this.cart[$parse.index()].num * $parse.find(".currPrice").text()).toFixed(2))

                }else if($src.is(".reduce")){  //减操作
                    this.cart[$parse.index()].num--;
                    if(this.cart[$parse.index()].num <=1 ){
                        this.cart[$parse.index()].num = 1;
                    }
                    $parse.find(".number").text(this.cart[$parse.index()].num);
                    
                    $parse.find(".subto").text((this.cart[$parse.index()].num * $parse.find(".currPrice").text()).toFixed(2))

                }
                $.cookie("cart",this.cart,{expires : 10,path:"/"});
            },
            // 删除处理
            delHandler(ev){
                const $par = $(ev.target).parents(".item");
                const _id = $par.find(".id").text();
                this.cart = this.cart.filter((curr) =>{
                    return curr.id != _id;
                })
                $par.remove();
                $(".cart i").text(this.cart.length);
                $.cookie("cart",this.cart,{expires : 10,path:"/"});
                this.isCartDara();
            },
            // 全选处理
            checkAll(event){
               const start = $(event.target).prop("checked");
               $(".checkAll").prop("checked",start);
               $(".itemCheck").prop("checked",start);
               this.totalSum();
            },
            // 部分选中处理
            partial(){
                // 查看商品的每一项的选中情况，读取cookie中的数据条数，如果相等，证明全选
                const count = $(".itemCheck:checked").length;
                $(".checkAll").prop("checked",count === this.cart.length);
            },
            // 总金额计算
            totalSum(){
                // 计算总金额首先判断复选框是否选中，然后累加小计金额
                let sum = 0;
                $(".itemCheck:checked").each((index,curr) => {
                    sum += Number($(curr).parents(".item").find(".subto").text());
                });
                $(".st-t").text("￥" + sum.toFixed(2));
            },
            // 批量删除
            deteleProduct(){
                // 查看所有商品的复选框状态，如果选中，返回id，并删除数据
                let product = [];
                $(".itemCheck:checked").each((index,curr) => {
                    $(curr).parents(".item").remove();
                    product.push($(curr).parents(".item").find(".id").text());
                });
                this.cart = this.cart.filter(curr =>{
                    return  product.indexOf(curr.id) == -1 ? true : false;
                });
                $.cookie("cart",this.cart,{expires : 10,path:"/"});
                $(".checkAll").prop("checked",false);
                $(".cart i").text(this.cart.length);
                this.totalSum();
                this.isCartDara();
                
            }


        });

        new cartPageData();
    })
})